package io.github.libkodi.basic_gateway.context;

import io.github.libkodi.basic_gateway.AbstractVerticle;
import io.github.libkodi.basic_gateway.component.ComponentImpl;
import io.github.libkodi.basic_gateway.router.RouteIntercepterImpl;
import io.vertx.core.DeploymentOptions;
import io.vertx.core.Future;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;

public interface Context {
	public Vertx vertx();
	public JsonObject config();
	public Future<JsonObject> config(String keys);
	public <T> T configValue(String key, Class<T> clazz);
	public Object configValue(String key);
	public ComponentImpl components();
	public RouteIntercepterImpl intercepter();
	public Future<String> deployVerticle(String name);
	public Future<String> deployVerticle(Class<? extends AbstractVerticle> verticle);
	public Future<String> deployVerticle(AbstractVerticle verticle);
	public Future<String> deployVerticle(String name, DeploymentOptions options);
	public Future<String> deployVerticle(Class<? extends AbstractVerticle> verticle, DeploymentOptions options);
	public Future<String> deployVerticle(AbstractVerticle verticle, DeploymentOptions options);
	public CurrentThread getCurrentThread();
}
